#ifndef _SYS_DEPEND_H_
#define _SYS_DEPEND_H_

#include "FanObj.h"
#include "SysTypes.h"

#define DEPEND_VTABLE(self)   ((DependVTable*)((FanObj*)self)->vtable)


extern Type*    Depend_classType;
extern VTable*  Depend_classVTable;


/* [sys::Depend] Attributes */
struct Depend
{
  FanObj        super;
};


/* [sys::Depend] Virtual-table */
typedef struct DependVTable
{
  FanObjVTable  super;
} DependVTable;


/* [sys::Depend] Methods and fields */
Bool            Depend_equals(Obj self, NullableObj that);
Int             Depend_hash(Obj self);
Str*            Depend_toStr(Obj self);
Depend*         Depend_fromStr_1(Str* s);
Depend*         Depend_fromStr(Str* s, Bool checked);
Str*            Depend_name(Depend* self);
Int             Depend_size(Depend* self);
Version*        Depend_version_0(Depend* self);
Version*        Depend_version(Depend* self, Int index);
Bool            Depend_isPlus_0(Depend* self);
Bool            Depend_isPlus(Depend* self, Int index);
Bool            Depend_isRange_0(Depend* self);
Bool            Depend_isRange(Depend* self, Int index);
Version*        Depend_endVersion_0(Depend* self);
Version*        Depend_endVersion(Depend* self, Int index);
Bool            Depend_match(Depend* self, Version* version);


/* [sys::Depend] Type-system functions */
Type*           Depend_initType(void);
VTable*         Depend_initVTable(void);
void            Depend_initStatic(void);


#endif
